package 移除元素;

//给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
//
//假设 nums 中不等于 val 的元素数量为 k，要通过此题，您需要执行以下操作：
//
//更改 nums 数组，使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
//返回 k

import java.util.Arrays;

//输入：nums = [3,2,2,3], val = 3
//输出：2, nums = [2,2,_,_]
//解释：你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。
//你在返回的 k 个元素之外留下了什么并不重要（因此它们并不计入评测）。
public class Solution {
    public static int removeElement(int[] nums, int val) {
       //双指针法
        //left,right 右指针 right 指向当前将要处理的元素，左指针 left 指向下一个将要赋值的位置。
        //如果右指针指向的元素不等于 val，它一定是输出数组的一个元素，我们就将右指针指向的元素复制到左指针位置，然后将左右指针同时右移；
        //
        //如果右指针指向的元素等于 val，它不能在输出数组里，此时左指针不动，右指针右移一位。
        //

        int left=0;
        for (int right = 0; right < nums.length; right++) {
            if (nums[right]!=val){
                nums[left]=nums[right];
                left++;
            }
        }
        return left;
    }

    public static void main(String[] args) {
        int[] nums=new int[]{0,1,2,2,3,0,4,2};
        int val=2;
        int removeElement = removeElement(nums, val);
        System.out.println(removeElement);
        System.out.println(Arrays.toString(nums));
    }
}
